import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.net.URL;

/**
 * 使用Thumbnailator类库处理图片的例子
 *
 * Thumbnailator 是一个优秀的图片处理的Google开源Java类库
 * 从API提供现有的图像文件和图像对象的类中简化了处理过程，两三行代码就能够从现有图片生成处理后的图片，
 * 且允许微调图片的生成方式，同时保持了需要写入的最低限度的代码量。
 */
public class Demos {

    public static void main(String[] args) throws Exception {
        size1();            // 指定大小缩放（锁定纵横比例）
        size2();            // 指定大小缩放（不锁定纵横比例）
        scale();            // 按照比例进行缩放
        rotate();           // 旋转
        watermark();        // 水印
        crop();             // 剪裁
        cvtFormat();        // 转化图像格式
        cvtQuality();       // 改变图片质量
        toOutputStream();   // 输出到流
    }

    /**
     * 指定大小缩放（锁定纵横比例）
     */
    public static void size1() throws Exception {
        Thumbnails.of(getURL("y1.png"))
                .size(300, 200)
                .toFile("c:/temp/1-1.jpg");
    }

    /**
     * 指定大小缩放（不锁定纵横比例）
     */
    public static void size2() throws Exception {
        Thumbnails.of(getURL("y1.png"))
                .size(300, 200)
                .keepAspectRatio(false)
                .toFile("c:/temp/1-2.jpg");
    }

    /**
     * 按照比例进行缩放
     */
    public static void scale() throws Exception {
        Thumbnails.of(getURL("y1.png"))
                .scale(0.5f) // 大于1放大，小于1缩小
                .toFile("c:/temp/2.jpg");
    }

    /**
     * 旋转
     */
    public static void rotate() throws Exception {
        Thumbnails.of(getURL("y1.png"))
                .size(300, 200)
                .rotate(90) // 角度：正数顺时针，附属逆时针
                .toFile("c:/temp/3.jpg");
    }

    /**
     * 水印
     */
    public static void watermark() throws Exception {
        BufferedImage watemarkBI = Thumbnails.of(getURL("2.png"))
                .scale(0.8f)
                .asBufferedImage();

        Thumbnails.of(getURL("y1.png"))
                .scale(1f)
                .watermark(Positions.BOTTOM_RIGHT, watemarkBI, 0.5f)
                .toFile("c:/temp/4.jpg");


    }

    /**
     * 剪裁
     */
    public static void crop() throws Exception {

        Thumbnails.of(getURL("y1.png"))
                .sourceRegion(Positions.CENTER, 400, 400)
                .size(200, 200)
                .keepAspectRatio(false)
                .toFile("c:/temp/5.jpg");


    }

    /**
     * 转化图像格式
     */
    public static void cvtFormat() throws Exception {
        Thumbnails.of(getURL("y1.png"))
                .scale(1)
                .outputFormat("gif")
                .toFile("c:/temp/6.gif");
    }

    /**
     * 改变图片质量
     */
    public static void cvtQuality() throws Exception {
        Thumbnails.of(getURL("y1.png"))
                .scale(1)
                .outputQuality(0.1) // 0.0f - 1.0f
                .toFile("c:/temp/7.jpg");
    }

    /**
     * 输出到流
     */
    public static void toOutputStream() throws Exception {
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        Thumbnails.of(getURL("y1.png"))
                .scale(1)
                .toOutputStream(os);
        System.out.println(os.size());
    }


    public static URL getURL(String fileName) {
        return Demos.class.getResource(fileName);
    }

}
